﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Mail;

namespace TangoFamilyAndGuide.RN
{
    public class CastingArtistsOffer
    {
        public static List<Entidades.CastingArtistsOffer> LeerListaCastingArtistsOfferPorUsuario(Entidades.Sesion Sesion)
        {
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            return db.LeerListaCastingArtistsOfferPorUsuario();
        }
        public static void Leer(Entidades.CastingArtistsOffer CastingArtistsOffer, Entidades.Sesion Sesion)
        {
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            db.Leer(CastingArtistsOffer);
        }
        public static void Crear(out int IdCastingArtistsOffer, Entidades.CastingArtistsOffer CastingArtistsOffer, Entidades.Sesion Sesion)
        {
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            CastingArtistsOffer.WF.Estado = "Active";
            IdCastingArtistsOffer = db.Crear(CastingArtistsOffer);
        }
        public static void Modificar(Entidades.CastingArtistsOffer CastingArtistsOfferActual, Entidades.CastingArtistsOffer CastingArtistsOffer, Entidades.Sesion Sesion)
        {
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            db.Modificar(CastingArtistsOfferActual, CastingArtistsOffer);
        }
        public static void CambiarEstado(Entidades.CastingArtistsOffer CastingArtistsOffer, string Evento, string Estado, Entidades.Sesion Sesion)
        {
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            db.CambiarEstado(CastingArtistsOffer, Evento, Estado);
            CastingArtistsOffer.WF.Estado = Estado;
        }
        public static Entidades.CastingArtistsOffer ObtenerCopia(Entidades.CastingArtistsOffer Desde)
        {
            Entidades.CastingArtistsOffer hasta = new Entidades.CastingArtistsOffer();
            hasta.Id = Desde.Id;
            hasta.Nombre = Desde.Nombre;
            hasta.Descripcion = Desde.Descripcion;
            hasta.Pais = Desde.Pais;
            hasta.Provincia = Desde.Provincia;
            hasta.Localidad = Desde.Localidad;
            hasta.Telefono = Desde.Telefono;
            hasta.Email = Desde.Email;
            hasta.WebSite = Desde.WebSite;
            hasta.Estilo = Desde.Estilo;
            hasta.UltActualiz = Desde.UltActualiz;
            hasta.WF.Id = Desde.WF.Id;
            hasta.WF.Estado = hasta.WF.Estado;
            hasta.Facebook = Desde.Facebook;
            hasta.YouTube = Desde.YouTube;
            hasta.Ranking = Desde.Ranking;
            hasta.TipoDestacado = Desde.TipoDestacado;
            hasta.UltActualiz = Desde.UltActualiz;
            return hasta;
        }
        public static List<Entidades.CastingArtistsOffer> ListaPorIdCastingArtistsOffer(int IdCastingArtistsOffer, bool SoloPropias, Entidades.Sesion Sesion)
        {
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            return db.ListaPorIdCastingArtistsOffer(IdCastingArtistsOffer, SoloPropias);
        }
        public static List<Entidades.CastingArtistsOffer> ListaPorNombre(string Nombre, bool SoloPropias, Entidades.Sesion Sesion)
        {
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            return db.ListaPorNombre(Nombre, SoloPropias);
        }
        public static List<Entidades.CastingArtistsOffer> ListaPorPais(string Pais, bool SoloPropias, Entidades.Sesion Sesion)
        {
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            return db.ListaPorPais(Pais, SoloPropias);
        }

        public static List<Entidades.CastingArtistsOffer> Lista(out int CantidadFilas, int IndicePagina, int TamañoPagina, string OrderBy, string Nombre, string Pais, string Provincia, string Localidad, string Estilos, string SessionID, Entidades.Sesion Sesion)
        {
            List<Entidades.CastingArtistsOffer> listaCastingArtistsOffer = new List<Entidades.CastingArtistsOffer>();
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            if (OrderBy.Equals(String.Empty))
            {
                OrderBy = "Ranking desc, IdCastingArtistsOffer desc";
            }
            listaCastingArtistsOffer = db.ListaCompleta(OrderBy, Nombre, Pais, Provincia, Localidad, Estilos);
            int cantidadFilas = listaCastingArtistsOffer.Count;
            CantidadFilas = cantidadFilas;
            return db.Lista(IndicePagina, TamañoPagina, OrderBy, SessionID, listaCastingArtistsOffer);
        }
        public static List<Entidades.CastingArtistsOffer> ListaCompleta(out int CantidadFilas, string OrderBy, string Nombre, string Pais, string Provincia, string Localidad, string Estilos, string SessionID, Entidades.Sesion Sesion)
        {
            List<Entidades.CastingArtistsOffer> listaCastingArtistsOffer = new List<Entidades.CastingArtistsOffer>();
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            if (OrderBy.Equals(String.Empty))
            {
                OrderBy = "Ranking desc, IdCastingArtistsOffer desc";
            }
            listaCastingArtistsOffer = db.ListaCompleta(OrderBy, Nombre, Pais, Provincia, Localidad, Estilos);
            int cantidadFilas = listaCastingArtistsOffer.Count;
            CantidadFilas = cantidadFilas;
            return listaCastingArtistsOffer;
        }
        public static bool ComprobarNombreCastingArtistsOffer(string Nombre, Entidades.Sesion Sesion)
        {
            DB.CastingArtistsOffer db = new DB.CastingArtistsOffer(Sesion);
            bool resp = db.ComprobarNombreCastingArtistsOffer(Nombre);
            return resp;
        }
        public static void EventoPosible(out Entidades.Evento Evento, Entidades.CastingArtistsOffer CastingArtistsOffer, Entidades.Sesion Sesion)
        {
            //Verificar si el usuario es administrador
            Evento = new Entidades.Evento();
            List<Entidades.Permiso> permisoAdminSITEActive = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
            {
                return p.TipoPermiso.Id == "AdminSITE" && p.Estado == "Active";
            });
            if (permisoAdminSITEActive.Count == 0)
            {
                if (CastingArtistsOffer.Estado == "CanceledAdmin")
                {
                    Evento.Id = "";
                    Evento.DescrEvento = "In this state there is no event available. Only the Site Manager can intervene.";
                    Evento.Accion = "";
                    Evento.EstadoHst = "";

                }
                else if (CastingArtistsOffer.Estado == "Active")
                {
                    Evento.Id = "Cancel";
                    Evento.DescrEvento = "Cancel";
                    Evento.Accion = "Cancel";
                    Evento.EstadoHst = "Canceled";
                }
                else if (CastingArtistsOffer.Estado == "Canceled")
                {
                    Evento.Id = "Undo Cancel";
                    Evento.DescrEvento = "Undo Cancel";
                    Evento.Accion = "Undo Cancel";
                    Evento.EstadoHst = "Active";
                }
            }
            else
            {
                if (CastingArtistsOffer.Estado == "CanceledAdmin")
                {
                    Evento.Id = "Undo Cancel (Admin)";
                    Evento.DescrEvento = "Undo Cancel (Admin)";
                    Evento.Accion = "Undo Cancel (Admin)";
                    Evento.EstadoHst = "Active";
                }
                else if (CastingArtistsOffer.Estado == "Active")
                {
                    Evento.Id = "Cancel (Admin)";
                    Evento.DescrEvento = "Cancel (Admin)";
                    Evento.Accion = "Cancel (Admin)";
                    Evento.EstadoHst = "CanceledAdmin";
                }
                else if (CastingArtistsOffer.Estado == "Canceled")
                {
                    Evento.Id = "Cancel (Admin)";
                    Evento.DescrEvento = "Cancel (Admin)";
                    Evento.Accion = "Cancel (Admin)";
                    Evento.EstadoHst = "CanceledAdmin";
                }
            }
        }
    }
}
